package designPattern.template;

//抽象类，表示豆浆
public abstract class SoyaMilk {

    //模板方法，make。模板方法可以变成final，不让子类去覆盖
    final void make(){
        select();
        if(customerWantCondiments()) {
            addCondiments();
        }
        soak();
        beat();
    }

    //选择材料
    void select(){
        System.out.println("第一次，选择新鲜好的黄豆！");
    }

    //添加不同的配料，抽象方法。子类具体实现
    abstract void addCondiments();

    //浸泡
    void soak(){
        System.out.println("第三步，黄豆和配料开始浸泡");
    }

    //==
    void beat(){
        System.out.println("第四步，黄豆和配料放到豆浆机去打");
    }

    //钩子方法
    boolean customerWantCondiments(){
        return true;
    }
}
